Network traffic for real-time media consists of one or more streams of data packets, each stream supporting one “channel”. Each packet of the stream provides a limited amount of playback time for the associated channel. In order to provide continuous playback, the data packets for each channel must arrive at regular intervals. The time that a packet takes to traverse the network varies, however, due to a number of factors. These factors include, for example, the number of nodes, the speed of the communications links, and the queuing delay that occurred at each node in the path. In addition, data packets may be lost in transit. Packet loss and variations in network delay, normally referred to as ‘network delay jitter’, occur as a part of normal packet network operation. Minimizing the effects of network delay jitter and packet loss on the playback of a real-time media stream is a challenging problem, and involves the buffering of the compressed real-time data at the point of playback for each channel. The buffers used for this purpose are referred to as “jitter buffers”.
Each packet in the data stream for a channel includes a small amount of packet header information, and a much larger amount of compressed real-time data, or “payload.” Typically, the packet header and the payload are stored together in the jitter buffer for that channel. Although the information in the packet header is used repeatedly by the jitter buffer algorithms, the payload is accessed only when decompression occurs.
The digital signal processors typically used to implement the decompression algorithms have a relatively small amount of fast, internal data memory. When a typical jitter buffer is stored within the internal data memory of the digital signal processor, it occupies a large portion of that space. Each channel that is supported also requires a certain amount of memory space during decompression for program or “instance” variables. The combined memory requirement of the jitter buffer and the instance variables limits the number of channels that may be supported by the internal memory of the typical digital signal processor. As an alternative, the jitter buffer may be stored in a larger external memory. Storing the jitter buffer in external memory, however, slows access to the packet header information needed for the jitter buffer algorithms. The slower access to packet header information reduces processor throughput, limiting the number of channels that may be supported.
Further limitations and disadvantages of conventional and traditional approaches will become apparent to one of skill in the art, through comparison of such systems with some aspects of the present invention as set forth in the remainder of the present application with reference to the drawings.